// client test:
const WebSocket = require('ws');

let count = 0;
let ws = new WebSocket('ws://192.168.2.104:3000');

function sendSock(msgType, content = {}, id = 0) {
  const baseMessage = {
    Id: id, // 消息Id(发送方内保持自增),请求中传入，响应中传回相同值
    // AccessToken: userStore.getToken, // 设备通信token
    MsgType: msgType, // 承载的具体消息类型
    Content: content, // 具体的消息数据
  };
  // 若是ws开启状态
  if (ws && ws.readyState === ws.OPEN) {
    // 发送指令
    ws.send(JSON.stringify(baseMessage));
  } else {
    // 自动重连ws
    // createWebSocket();
    setTimeout(() => {
      if (ws) {
          ws.send(JSON.stringify(baseMessage));
      }
    }, 1000);
  }
}

const contentTypeMap = {
  UnknownContent: 0, // 未知内容
  Text: 1, // 文本内容
  Picture: 2, // 图片消息
  Voice: 3, // 语音消息
  Video: 4, // 视频消息
  System: 5, // 系统消息
  Link: 6, // 链接消息
  LinkExt: 7, // 扩展的链接消息（小程序分享等），内容为xml格式，暂未使用
  File: 8, // 文件发送
  NameCard: 9, // 名片
  Location: 10, // 位置信息
  LuckyMoney: 11, // 红包
  MoneyTrans: 12, // 转账
  WeApp: 13, // 小程序
  Emoji: 14, //
  RoomManage: 15, // 群管理消息
  Sys_LuckyMoney: 16, // 领取红包消息
  RoomSystem: 17, // 群聊系统消息
  BizLink: 18, // 公众号文章
  AudioCall: 19, // 语音通话
  VideoCall: 20, // 视频通话
  NotifyMsg: 21, // 服务通知
  QuoteMsg: 22, // 引用通知
  JieLongMsg: 23, // 接龙
  ShiPinHao: 24, // 视频号消息
  RoomLiving: 25, // 群直播消息
  PaiYiPai: 26, // 拍一拍
  Music: 27, // 分享音乐
  FinderLive: 28, // 视频号直播
  KefuNameCard: 29, // 客服号名片
  QiyeNameCard: 30, // 企业微信名片
  UnSupport: 99 // 不支持的消息
}

// 生成消息id
const generateTaskId = () => {
  return new Date().getTime() * 10000 + parseInt(Math.random() * 10000, 10)
}
// base64 encode
function encode(str) {
  return Buffer.from(str).toString('base64')
}


/**
 * 给好友发消息任务
 * @param {String} wechatId 所属微信号
 * @param {String} friendId 发送给那个好友
 * @param {String} contentType 发送消息类型 Text Picture Voice Video Link File NameCard WeApp
 * @param {String} content 发送消息内容 文本，文件url，链接json，名片wxid
 * @param {String} remark 其他备注信息，群聊@别人；Quote（引用消息）：引用消息的msgSvrId字符串
 * @param {Number} msgId 发送给手机端的时候需要赋值，用于TalkToFriendTaskResultNotice中
 * @returns TalkToFriendTaskResultNotice
 */
function TalkToFriendTask(wechatId, friendId, contentType, content, remark = '', msgId) {
  const msgContent = {
    WeChatId: wechatId,
    FriendId: friendId,
    ContentType: contentTypeMap[contentType],
    Content: encode(content),
    Remark: remark,
    MsgId: msgId || generateTaskId(),
  };
  sendSock(1070, msgContent);
}

// 群发消息
function WeChatGroupSendTask(message) {
  const msgContent = {
    TaskId: generateTaskId(), // 任务id
    FriendIds: message.FriendIds, // 目标人群id列表
    ContentType: message.ContentType, // 内容类型
    Content: message.Content, // 文字内容 或 图片列表
    WeChatId: message.WeChatId // 微信号id
  }
  // Text = 0; //文字
  // Picture = 1; //图片
  // Voice = 2; // 语音消息
  // Video = 3; // 视频消息
  sendSock(1076, msgContent);
}

 // sdk 获取指定群聊的详情
// 返回1.群的信息ChatRoomAddNotice
// 返回2.群成员信息ChatRoomMembersNotice
function  RequestChatRoomInfoTask(wechatId, chatroomId) {
  let msgContent = {
    WeChatId: wechatId,
    ChatRoomId: chatroomId,
    Flag: 1, // Flag=1:推送成员信息（ChatRoomMembersNotice)
    
  }
  sendSock(1211, msgContent);
}

ws.on('open', function () {
  console.log(`[CLIENT] open()`);
  // ws.send('Hello!');
  sendSock('heartBeat');
    // 发送心跳 必须发送 长时间不发送会断开链接
  wsHeartBeat = setInterval(() => {
      sendSock('heartBeat');
  }, 30000);
});

ws.on('message', function (message) {
  try {
    const jMessage = JSON.parse(message);
    const { MsgType, Content } = jMessage
    console.log(`[CLIENT] Received:`);
    console.log(MsgType, Content);
    
    // 收到的消息自动回复
    const {wechatid,friendid}  = Content
    if(jMessage.MsgType === 1024){
      console.log('自动回复',wechatid,friendid)
      // 群聊 自动回复
      if(friendid.includes('chatroom')){
        // 指定的群 自动回复
        if(friendid === '45665123632@chatroom'){
          // TalkToFriendTask(wechatid,friendid,'Text','你好,群聊')
          // // 群发 接口已经废弃
          // WeChatGroupSendTask({
          //   FriendIds:['wxid_10v49p32vkcv22','Uta2012','wxid_uhte06qjw1io22'].join(','),
          //   ContentType: '0',
          //   Content: '好久不见，你还好么',
          //   WeChatId: wechatid
          // })
          // RequestChatRoomInfoTask(wechatid, friendid);
          // 400人群测试
          RequestChatRoomInfoTask(wechatid, '25006914329@chatroom');
        }
      }else{
        // 好友发来的消息 自动回复
        TalkToFriendTask(wechatid,friendid,'Text','你好')
      }
    } 
  } catch (error) {
    console.log(`[CLIENT] Received: ${message}`);
  }
    // count++;
    // if (count > 3) {
    //     ws.send('Goodbye!');
    //     ws.close();
    // } else {
    //     setTimeout(() => {
    //         ws.send(`Hello, I'm Mr No.${count}!`);
    //     }, 1000);
    // }
});